package com.zb.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zb.entity.SelectVo;
import com.zb.entity.ZjStoreGoodsStock;
import com.zb.entity.ZjStoreGoodsStockCode;
import com.zb.extend.StoreGoodsStockExtend;
import com.zb.vo.GoodsStockSelectVo;
import com.zb.vo.StoreGoodsStockVo;

import java.util.List;

/**
 * <p>
 * 仓库商品库存表 服务类
 * </p>
 *
 * @author WEN
 * @since 2023-10-30
 */
public interface ZjStoreGoodsStockService extends IService<ZjStoreGoodsStock> {
    /**
     * 保存新增的仓库商品库存（注：此执行要重新执行查询，避免同时出入库导致物料重复）
     * @param storeGoodsStockList
     */
    void save(List<ZjStoreGoodsStock> storeGoodsStockList, List<ZjStoreGoodsStockCode> storeGoodsStockCodeList);

    /**
     * 根据仓库ID删除仓库商品库存
     * @param storeIds 仓库ID
     */
    void deleteBatchByStoreId(List<Long> storeIds);

    /**
     * 根据[商品ID]查询是否与仓库物料仓库关联的商品ID
     * @param type        商品类型：1-成品，2-配件
     * @param goodsIds     商品ID
     */
    List<Long> getGoodsIdByGoodsIds(Integer type, List<Long> goodsIds);

    /**
     * 根据[商品ID]&[商品规格ID]查询是否与仓库物料仓库关联的商品规格ID
     * @param type        商品类型：1-成品，2-配件
     * @param goodsId     商品ID
     * @param goodSpecIds 商品规格ID
     */
    List<Long> getGoodsSpecIdByGoodsIdAndGoodSpecIds(Integer type, Long goodsId, List<Long> goodSpecIds);

    /**
     * 根据仓位ID集合分组统计获取即时库存数
     * @param storePositionIds 仓位ID
     * @return
     */
    List<ZjStoreGoodsStock> getSystemStockGroupByStorePositionIds(List<Long> storePositionIds);

    /**
     * 根据[仓库ID]&[商品ID]&[商品规格ID]查询仓库商品库存
     * @param storeIds 仓库ID
     * @param goodsIds 商品ID
     * @param goodsSpecIds 商品规格ID
     * @return
     */
    List<ZjStoreGoodsStock> getByStoreIdsAndGoodsIdsAndGoodsSpecIds(List<Long> storeIds, List<Long> goodsIds, List<Long> goodsSpecIds);

    /**
     * 获取商品库存
     * @param selectVo
     * @return
     */
    StoreGoodsStockVo getGoodsStock(GoodsStockSelectVo selectVo);

    /**
     * 根据仓库ID获取仓库商品库存
     * @param storeIds 仓库ID
     * @return
     */
    List<ZjStoreGoodsStock> getByStoreIds(List<Long> storeIds);

    /**
     * 根据仓库ID获取仓库商品库存
     * @param storeId 仓库ID
     * @return
     */
    List<ZjStoreGoodsStock> getByStoreId(Long storeId);

    /**
     * 获取服务商仓库商品明细列表
     * @param storeId 仓库ID
     * @param selectVo 搜索对象
     * @return
     */
    List<StoreGoodsStockExtend> getNetworkMobileStoreGoods(Long storeId, SelectVo selectVo);

    /**
     * 获取服务商仓库商品明细列表总记录数
     * @param storeId 仓库ID
     * @param selectVo 搜索对象
     * @return
     */
    long getNetworkMobileStoreGoodsCount(Long storeId, SelectVo selectVo);

}
